package com.ken.zeratul.commons.spring;

import lombok.Data;
import org.springframework.util.ObjectUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 注册到Spel表达式中的方法对象
 */
@Data
public class RegisterMethod {

    /**
     * 需要注册的方法的目标Class对象
     */
    private Class registerMethodObjCls;

    /**
     * 需要注册的方法名
     */
    private String methodName;

    /**
     * 调用方法名称
     */
    private String execMethodName;

    /**
     * 需要注册的方法参数类型
     */
    private List<Class> paramClasses;

    {
        paramClasses = new ArrayList<>();
    }


    /**
     * 添加需要注册的方法参数类型
     * @param paramCls
     */
    public RegisterMethod addParamClass(Class paramCls) {
        if (ObjectUtils.isEmpty(paramCls)) return this;
        paramClasses.add(paramCls);
        return this;
    }

    /**
     * 添加需要注册的方法参数类型（批量）
     * @param paramCls
     */
    public RegisterMethod addParamClasses(Class... paramCls) {
        if (ObjectUtils.isEmpty(paramCls)) return this;
        paramClasses.addAll(Arrays.stream(paramCls).collect(Collectors.toList()));
        return this;
    }
}
